#include <iostream>
#include <cstring>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <cstdio>

using namespace std;

int main()
{
    pid_t id = fork();
    if(id == 0) 
    {
        char *const argv[] = {
            (char*)"ls",
            (char*)"--color",
            (char*)"-a",
            (char*)"-l",
            nullptr
        };

        (void)argv;
        // 接口1：
        // execl("/bin/ls", "ls", "-l", "-a", nullptr);
        
        // 接口2：
        // execv("/bin/ls", argv);
        
        // 接口3： 
        // execlp("ls", "ls", "--color", "-a", "-l", nullptr);
        
        // 接口4：
        // execvp(argv[0], argv);
        

        char *const argv1[] = {
            (char*)"other",
            nullptr
        };

        char *const env[] = {
            (char*)"HELLO=bite"
        };


        // 接口5：使用全新的环境变量传递给子进程
        execvpe("./other", argv1, env); 
        exit(1);
    }

    pid_t rid = waitpid(id, nullptr, 0);
    if(rid > 0)
    {
        printf("等待子进程成功！\n");
    }

    return 0;
}
